c=3e8; 
f0=2.4e9;
R=200;              % 距离100m
T=10e-6;            % 调频周期10us
B=5e6;              % 带宽5MHz
phase_initial=0;    % 初始相位
A=1;                % 初始振幅
fs=4.8e9;           % 发射/返回信号采样频率
K=0.8;              % 返回信号衰减系数
%假设想显示2个周期信号，采样时间是20us，倒推采样点数
N=round(fs*T*2);
attenution = sqrt(exp(-0.01178*R));
%计算出的变量
%f0=c/wave;
go_back_time=2*R/c; % 信号往返时间
k=2*B/T;            % 调频斜率
t=(0:N-1)/fs;       % 时间轴
n=0:N-1;            % 离散信号索引
go_back_time_num=fs*go_back_time;

%模型建立
f_go=zeros(1,N);
f_back=zeros(1,N);
s_go=zeros(1,N);
s_back=zeros(1,N);
j=zeros(1,N);

%发射信号
num_go=0;
for i = 1:N
    if i<=(num_go+1/2)*fs*T
        % 上升沿
        f_go(i) = f0 + k * (t(i)-num_go*T);
        s_go(i) = A*cos (2*pi*(f0*(t(i)-num_go*T)+k*(t(i)-num_go*T)^2/2)+phase_initial );
    else
        % 下降沿
        f_go(i) = f0 + B - k * ((t(i)-num_go*T) - T/2);
        s_go(i) = A*cos (2*pi*((f0+B)*(t(i)-num_go*T)-k*(t(i)-(num_go+0.5)*T)^2/2)+phase_initial );
    end
    % 向下取整计数
    num_go = floor(i/(fs*T));
end
%返回信号
for i=1:N
    if i>go_back_time_num
        f_back(i)=f_go(i-go_back_time_num);
        s_back(i)=K*s_go(i-go_back_time_num);
    else
        f_back(i)=f_go(N-go_back_time_num+i);
        s_back(i)=K*s_go(N-go_back_time_num+i);
    end
end 

%生成发射信号频谱
% 对时域信号进行 FFT
S_go = fft(s_go);               % FFT结果
f = (0:N-1) * (fs / N);         % 频率轴
% 计算频域信号的幅度
S_mag = abs(S_go);              % 幅度谱
S_mag = S_mag / max(S_mag);     % 归一化

%生成混频信号
s_mix=s_go .* conj(s_back);
Hd = Filter_hann;
s_filter=filter(Hd,s_mix);

% 对滤波后的信号进行 FFT
N_filter = length(s_filter);
S_filter = fft(s_filter);
f_filter = (0:N_filter-1) * (fs / N_filter); % 频率轴

% 归一化幅度谱
S_filtered_mag = abs(S_filter);
S_filtered_mag = S_filtered_mag / max(S_filtered_mag);

f_resolution = fs / N_filter;
f_axis = (0:N_filter/2-1) * f_resolution;

% --- 步骤2: 峰值检测 ---
[~, idx] = max(S_filter_mag);
fb = f_axis(idx);

% --- 步骤3: 距离解算 ---
R_calculated = (c * T * fb) / (2 * B);


% 绘制汉宁窗滤波后的频域图
figure(8);
plot(f_filter*1e-6, S_filtered_mag, 'r', 'LineWidth', 0.5);
xlabel('频率 (MHz)');
ylabel('归一化幅度 (dB)');
title('滤波后的中频信号（频域）');
grid on;
xlim([0 1]); % 显示 0 到 10 MHz


%返回信号时域与振幅
figure(9);
subplot(211);
plot(t,s_mix, 'b', 'LineWidth', 0.1);
hold on;
subplot(212);
plot(t,s_filter, 'b', 'LineWidth', 0.1);
hold off;
xlabel('时间s');
ylabel('幅度');
title('滤波信号时域图');

fprintf('实际距离: %.2f m\n', R);                % 你的设定值 R=100m
fprintf('计算距离: %.2f m\n', R_calculated);     % 计算结果
%{
figure(1);
plot(t, f_go/1e9, 'b', 'LineWidth', 0.5);
xlabel('时间 (s)');
ylabel('频率 (GHz)');
title('发射信号频率与时间的关系');
grid on;

figure(2);
plot(t, f_back/1e9, 'r', 'LineWidth', 0.5);
xlabel('时间 (s)');
ylabel('频率 (GHz)');
title('回波信号频率与时间的关系');
grid on;

figure(3);
hold on;
plot(t, f_go/1e9, 'b', 'LineWidth', 0.5);
hold on
plot(t, f_back/1e9, 'r', 'LineWidth', 0.5);
xlabel('时间 (s)');
ylabel('频率 (GHz)');
title('收发信号频率与时间的关系（蓝线是发射信号，红色是回波信号）');
grid on;


%发射信号时域与振幅
figure(4);
plot(t,s_go, 'b', 'LineWidth', 0.1);
ylim([-2,2])
xlabel('时间s');
ylabel('幅度');
title('发射信号时域图');
grid on;

%返回信号时域与振幅
figure(5);
plot(t,s_back, 'b', 'LineWidth', 0.1);
ylim([-2,2])
xlabel('时间s');
ylabel('幅度');
title('回波信号时域图');

% 绘制频域信号图
figure(6);
plot(f*1e-9, S_mag, 'r', 'LineWidth', 0.5); % 以 dB 为单位
xlabel('频率 (GHz)');
ylabel('幅度 (dB)');
title('FMCW 发射信号（频域）');
grid on;

figure(7);
plot(t,s_mix, 'b', 'LineWidth', 0.1);
ylim([-2,2])
xlabel('时间s');
ylabel('幅度');
title('混频信号时域图');
grid on;
%}

